Partición de datos

A veces es inteligente convertir variables numéricas a categóricas ya que si necesitamos aplicar métodos de análisis, simplificar variables esto puede ser conveniente. Para categorizar variables en R hacemos el siguiente procedimiento.

library(kableExtra)
## Warning: package 'kableExtra' was built under R version 3.5.2
base <- read.csv("../Bases de datos/data-conversion.csv")
kable(head(base), "markdown")
Age State Gender Height Income
23 NJ F 61 5000
13 NY M 55 1000
36 NJ M 66 3000
31 VA F 64 4000
58 NY F 70 30000
29 TX F 63 10000
#Creamos un vector de intervalos
Intervalos <- c(-Inf, 3000, 10000, Inf)

#Etiquetas de los intervalos
Etiquetas <- c("Bajo", "Medio", "Alto")

#Se crean las particiones
base$Income.c <- cut(base$Income, breaks = Intervalos, labels = Etiquetas)
kable(head(base), "markdown")
Age State Gender Height Income Income.c
23 NJ F 61 5000 Medio
13 NY M 55 1000 Bajo
36 NJ M 66 3000 Bajo
31 VA F 64 4000 Medio
58 NY F 70 30000 Alto
29 TX F 63 10000 Medio

Podemos prescindir de las etiquetas de los intervalos o el los puntos de corte de los intervalos.

#Sin etiquetas
base$Income.c <- cut(base$Income, breaks = Intervalos)
kable(head(base), "markdown")
Age State Gender Height Income Income.c
23 NJ F 61 5000 (3e+03,1e+04]
13 NY M 55 1000 (-Inf,3e+03]
36 NJ M 66 3000 (-Inf,3e+03]
31 VA F 64 4000 (3e+03,1e+04]
58 NY F 70 30000 (1e+04, Inf]
29 TX F 63 10000 (3e+03,1e+04]
#Sin intervalos
base$Income.c <- cut(base$Income,breaks = 3, labels = Etiquetas)
kable(head(base), "markdown")
Age State Gender Height Income Income.c
23 NJ F 61 5000 Bajo
13 NY M 55 1000 Bajo
36 NJ M 66 3000 Bajo
31 VA F 64 4000 Bajo
58 NY F 70 30000 Medio
29 TX F 63 10000 Bajo

Subconjunto de datos

base1 <- read.csv("../Bases de datos/auto-mpg.csv")
kable(head(base1), "markdown")
No mpg cylinders displacement horsepower weight acceleration model_year car_name
1 28 4 140 90 2264 15.5 71 chevrolet vega 2300
2 19 3 70 97 2330 13.5 72 mazda rx2 coupe
3 36 4 107 75 2205 14.5 82 honda accord
4 28 4 97 92 2288 17.0 72 datsun 510 (sw)
5 21 6 199 90 2648 15.0 70 amc gremlin
6 23 4 115 95 2694 15.0 75 audi 100ls

Basados en índices y nombres

Los indices representan la posición de el dato o los datos que queremos extraer, los indices estan datos desde el número 1.

# Fila de la 1 a la 5 y columnas 1 a la 3
kable(base1[1:5, 1:3], "markdown")
No mpg cylinders
1 28 4
2 19 3
3 36 4
4 28 4
5 21 6
# Fila de la 1 a la 5 y columnas 1,3,5
kable(base1[1:5, c(1,3,5)], "markdown")
No cylinders horsepower
1 4 90
2 3 97
3 4 75
4 4 92
5 6 90
# Fila de la 1 a la 5 y columnas 1,3,5
kable(base1[1:5, c("displacement", "weight")], "markdown")
displacement weight
140 2264
70 2330
107 2205
97 2288
199 2648

Nota: Si se agrega nada antes de la coma indica que se tomas todas las filas y si no se agrega nada despues se seleccionan todas las columnas.

Basado en condiciones

kable(base1[base1$weight == max(base1$weight) |
        base1$weight == min(base1$weight),], "markdown" )
No mpg cylinders displacement horsepower weight acceleration model_year car_name
30 30 35 4 72 69 1613 18 71 datsun 1200
240 240 13 8 400 175 5140 12 71 pontiac safari (sw)

Asi mismo de pueden hacer filtro usando los simbolos:

  • ! -> representa la negación
  • & -> representa si
  • | -> representa o

La función subset()

Con la función subset()podemos realizar los procedimientos anteriores.

kable(subset(base1, base1$cylinders == 3,
             select = "car_name"), "markdown")
car_name
2 mazda rx2 coupe
199 maxda rx3
251 mazda rx-7 gs
365 mazda rx-4

Anexo: Eliminar registro duplicados

#Se eliminan los registros duplicados de la base de datos.
unique(base) 

#Arroja un vector lógico, donde TRUE indica que la observación se encuentra duplicada
duplicated(base) 

#Se obtienen solo los registros duplicados en la base de datos.
family[duplicated(base),]